-- 聊天xdc-抢红包lua脚本
-- 作者：xiaobo
-- 日期：2019-12-07
--[[
--
xdcloud&redpacket&redpacketList& + redPacketCacheKey                     为 List 结构，存放预先生成的红包明细信息，格式：红包明细id + 发送红包id + 红包金额 + 大红包id + 表名
xdcloud&redpacket&redpacketget_count& + redPacketCacheKey + grabUserId   为 k-v 结构，用户领取红包计数器
xdcloud&redpacket&redpacketget& + redPacketCacheKey                      为 Hash 结构，存放红包领取记录
xdcloud&redpacket&redpacketsend& + redPacketCacheKey                     为 List 结构，红包异步发放队列
redPacketCacheKey                                                        为标识抢红包的唯一标识(redPacketType + sendUserId + redPacketId),唯一标识一次发红包行为
grabUserId                                                               为领取用户id
result                                                                   为脚本执行响应标识：1代表已领取；2代表领取次数过多；3代表红包队列已领取完；4代表红包正在领取；
]]--

local redPacketCacheKey = KEYS[1]
local grabUserId = KEYS[2]

local isRedpacketget = redis.call("HEXISTS","xdcloud&redpacket&redpacketget&"..redPacketCacheKey,grabUserId)
if isRedpacketget ~= 0 then
    return 1
end

local redpacketgetTimes = redis.call("INCR","xdcloud&redpacket&redpacketget_count&"..redPacketCacheKey..grabUserId)
if redpacketgetTimes and tonumber(redpacketgetTimes) > 1 then
    return 2
end

local redpacketInfo = redis.call("RPOP","xdcloud&redpacket&redpacketList&"..redPacketCacheKey)
if not redpacketInfo then
    return 3
end

local redpacket = { redpacketInfo=redpacketInfo ,grabUserId=KEYS[2] }

redis.call("HSET","xdcloud&redpacket&redpacketget&"..redPacketCacheKey,grabUserId,cjson.encode(redpacket))
redpacket["grabUserId"] = grabUserId
redis.call("RPUSH","xdcloud&redpacket&redpacketsend&"..redPacketCacheKey,cjson.encode(redpacket))

return 4
